import http from '../../utils/request';

Page({
  data: {
    currentTab: 'myApply', // 默认显示我的申请
    tabList: ['myApply', 'pendingApproval', 'approved', 'apply'], // 标签页列表
    myApplyList: [], // 我的申请列表（从接口获取）
    pendingApprovalList: [], // 待审批列表（从接口获取）
    approvedList: [], // 已审批列表（从接口获取）
    selectedType: '请假申请', // 默认选择请假申请
    showTypePopup: false,
    showCalendar: false,
    date: '',
    startDate: '',
    endDate: '',
    currentSalary: '10000',
    expectedSalary: '',
    selectedDayIndex: 0,
    reason: '',
    leaveReason: '',
    probationSummary: '',
    minDate: new Date().getTime(),
    maxDate: new Date(new Date().setFullYear(new Date().getFullYear() + 1)).getTime(),
    days: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
    applicationTypes: ['调薪申请', '转正申请', '补卡申请', '请假申请'],
    paserData: [] // 存储用户登录数据
  },

  onLoad() {
    // 页面加载时检查登录状态
    this.checkLoginStatus();
    
    const employee = wx.getStorageSync('user');
    if (employee && employee.id) {
      this.getApproval(employee.id);
    } else {
      console.log('未获取到用户ID，无法查询审批记录');
    }

    // 初始化申请页面数据
    this.initApplyData();
  },

  onShow() {
    // 页面显示时再次检查登录状态（防止登录后返回）
    this.checkLoginStatus();
    
    // 检查标签页状态
    this.checkTabStatus();
    
    // 重新获取数据（例如从其他页面返回时）
    const employee = wx.getStorageSync('user');
    if (employee && employee.id) {
      this.getApproval(employee.id);
    }
  },

  /**
   * 检查登录状态
   * 若未登录则跳转至登录页面，并传递当前页面路径
   */
  checkLoginStatus() {
    const userData = wx.getStorageSync('user');
    this.setData({ paserData: userData });
    
    // 若用户数据为空，提示登录并跳转
    if (!userData || (Array.isArray(userData) && userData.length === 0) || (typeof userData === 'object' && Object.keys(userData).length === 0)) {
      const currentPage = getCurrentPages().pop();
      const returnUrl = '/pages/application/application';
      
      wx.setStorageSync('returnUrl', returnUrl);
      
      wx.showModal({
        title: '登录提示',
        content: '请先登录账号以访问此功能',
        showCancel: false,
        success: () => {
          wx.redirectTo({
            url: '/pages/login/login' // 替换为实际的登录页面路径
          });
        }
      });
    }
  },

  /**
   * 初始化申请页面数据（仅在已登录时执行）
   */
  initApplyData() {
    if (this.data.paserData && ((Array.isArray(this.data.paserData) && this.data.paserData.length > 0) || (typeof this.data.paserData === 'object' && Object.keys(this.data.paserData).length > 0))) {
      this.setData({
        selectedType: '请假申请',
        showTypePopup: false,
        showCalendar: false,
        date: '',
        startDate: '',
        endDate: '',
        expectedSalary: '',
        selectedDayIndex: 0,
        reason: '',
        leaveReason: '',
        probationSummary: ''
      });
    }
  },

  /**
   * 检查标签页状态合法性
   */
  checkTabStatus() {
    const { currentTab, tabList } = this.data;
    if (!tabList.includes(currentTab)) {
      this.setData({ currentTab: 'myApply' });
    }
  },

  /**
   * 标签页切换
   */
  switchTab(e) {
    const tab = e.detail.name;
    this.setData({
      currentTab: tab
    });
    
    // 切换到申请页时，初始化数据
    if (tab === 'apply') {
      this.initApplyData();
    }
  },

  /**
   * 跳转到申请页面
   */
  gotoApply() {
    this.setData({
      currentTab: 'apply'
    });
  },

  /**
   * 显示申请类型选择器
   */
  showTypePicker() {
    this.setData({
      showTypePopup: true
    });
  },

  /**
   * 关闭申请类型选择器
   */
  onCloseTypePopup() {
    this.setData({
      showTypePopup: false
    });
  },

  /**
   * 申请类型变更处理
   */
  onTypeChange(e) {
    const selectedValue = e.detail.value;
    this.setData({
      selectedType: selectedValue,
      showTypePopup: false
    });
  },

  /**
   * 显示日期选择器
   */
  onDisplay() {
    this.setData({ showCalendar: true });
  },

  /**
   * 关闭日期选择器
   */
  onCloseCalendar() {
    this.setData({ showCalendar: false });
  },

  /**
   * 格式化日期（调整为带时分秒格式）
   */
  formatDateTime(date) {
    date = new Date(date);
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const hours = date.getHours().toString().padStart(2, '0');
    const minutes = date.getMinutes().toString().padStart(2, '0');
    const seconds = date.getSeconds().toString().padStart(2, '0');
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  },

  /**
   * 格式化日期（仅日期部分）
   */
  formatDate(date) {
    date = new Date(date);
    return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
  },

  /**
   * 确认选择日期
   */
  onConfirmDate(event) {
    const [start, end] = event.detail;
    this.setData({
      showCalendar: false,
      date: `${this.formatDate(start)} - ${this.formatDate(end)}`,
      startDate: this.formatDate(start),
      endDate: this.formatDate(end)
    });
  },

  /**
   * 期望薪资输入
   */
  onExpectedSalaryInput(e) {
    this.setData({
      expectedSalary: e.detail
    });
  },

  /**
   * 补卡日期选择
   */
  onDayChange(e) {
    this.setData({
      selectedDayIndex: e.detail.value
    });
  },

  /**
   * 申请原因输入
   */
  onReasonInput(e) {
    this.setData({
      reason: e.detail
    });
  },

  /**
   * 请假原因输入
   */
  onLeaveReasonInput(e) {
    this.setData({
      leaveReason: e.detail
    });
  },

  /**
   * 转正总结输入
   */
  onProbationInput(e) {
    this.setData({
      probationSummary: e.detail
    });
  },

  /**
   * 处理审批操作（通过/拒绝）
   */
  handleApproval(e) {
    // 操作前检查登录状态
    if (!this.data.paserData || ((Array.isArray(this.data.paserData) && this.data.paserData.length === 0) || (typeof this.data.paserData === 'object' && Object.keys(this.data.paserData).length === 0))) {
      this.checkLoginStatus();
      return;
    }
    
    const { id, type } = e.currentTarget.dataset;
    const action = type === 'approve' ? '通过' : '拒绝';
    
    wx.showModal({
      title: `确认${action}`,
      content: `是否确认${action}该申请？`,
      success: (res) => {
        if (res.confirm) {
          // 模拟处理审批逻辑（实际项目中应调用接口）
          setTimeout(() => {
            wx.showToast({
              title: `${action}成功`,
              icon: 'success'
            });
            
            // 更新本地数据
            const newList = this.data.pendingApprovalList.filter(item => item.id !== id);
            this.setData({
              pendingApprovalList: newList
            });
            
            // 实际项目中应调用接口更新状态，并重新获取数据
            this.getApproval(this.data.paserData.id);
          }, 500);
        }
      }
    });
  },

  /**
   * 提交申请（适配后端接收类，调整时间格式）
   */
  submitApplication() {
    // 提交前检查登录状态
    if (!this.data.paserData || ((Array.isArray(this.data.paserData) && this.data.paserData.length === 0) || (typeof this.data.paserData === 'object' && Object.keys(this.data.paserData).length === 0))) {
      this.checkLoginStatus();
      return;
    }
    
    const { selectedType, startDate, endDate, expectedSalary, selectedDayIndex, reason, leaveReason, probationSummary } = this.data;
    
    // 表单验证（保持原有逻辑）
    if (!selectedType) {
      wx.showToast({
        title: '请选择申请类型',
        icon: 'none'
      });
      return;
    }

    if (selectedType === '请假申请' && (!startDate || !endDate)) {
      wx.showToast({
        title: '请选择请假日期区间',
        icon: 'none'
      });
      return;
    }

    if (selectedType === '调薪申请' && !expectedSalary) {
      wx.showToast({
        title: '请输入期望薪资',
        icon: 'none'
      });
      return;
    }

    if ((selectedType === '补卡申请' || selectedType === '请假申请') && !reason && !leaveReason) {
      wx.showToast({
        title: '请输入申请原因',
        icon: 'none'
      });
      return;
    }

    if (selectedType === '转正申请' && !probationSummary) {
      wx.showToast({
        title: '请输入转正总结',
        icon: 'none'
      });
      return;
    }

    // 构建申请数据（适配后端接收类）
    const applicationData = {
      employeeId: this.data.paserData.id, // 员工ID
      title: selectedType, // 申请事件
      categoryId: null, // 关联的申请ID
      startTime: startDate ? new Date(startDate) : null, // 开始时间（Date对象）
      endTime: endDate ? new Date(endDate) : null, // 结束时间（Date对象）
      initiateTime: this.formatDateTime(new Date()), // 申请时间（YYYY-MM-DD HH:mm:ss）
      content: '', // 原因
      currentApproverId: null, // 审批人ID
      salary: '' // 薪资（调薪申请时赋值）
    };

    // 根据不同申请类型设置内容和薪资
    switch (selectedType) {
      case '请假申请':
        applicationData.content = leaveReason;
        break;
      case '调薪申请':
        applicationData.content = leaveReason;
        applicationData.salary = expectedSalary; // 传递薪资
        break;
      case '补卡申请':
        applicationData.content = reason;
        break;
      case '转正申请':
        applicationData.content = probationSummary;
        break;
      default:
        break;
    }

    // 打印申请数据（包含时间格式）
    console.log('提交的申请数据:', applicationData);
    if (selectedType === '请假申请') {
      console.log('请假开始时间:', startDate);
      console.log('请假结束时间:', endDate);
    }
    console.log('申请时间:', applicationData.initiateTime);
    
    // 显示加载状态
    wx.showLoading({
      title: '提交中...',
      mask: true
    });

    // 调用接口提交申请
    http.post('/attendance/addAttendanceRecord', applicationData)
    .then(res => {
      console.log('审批记录添加成功:', res);
      
      wx.hideLoading();
      wx.showToast({
        title: '申请提交成功',
        icon: 'success',
        duration: 2000
      });
      
      // 提交成功后重置表单
      this.setData({
        selectedType: '',
        showTypePopup: false,
        showCalendar: false,
        date: '',
        startDate: '',
        endDate: '',
        expectedSalary: '',
        selectedDayIndex: 0,
        reason: '',
        leaveReason: '',
        probationSummary: ''
      });
      
      // 切换到我的申请页签
      this.setData({
        currentTab: 'myApply'
      });
      
      // 更新我的申请列表（实际项目中应从接口获取最新数据）
      const newApply = {
        id: Date.now(),
        applyTime: new Date().toLocaleString(),
        approvalStatus: '审批中',
        statusType: 'warning',
        statusIcon: 'clock-o',
        statusColor: '#ff9900',
        progressText: '等待部门经理审核',
        applicant: this.data.paserData.name || '吴彦祖',
        project: selectedType,
        reason: leaveReason || reason || probationSummary
      };
      
      this.setData({
        myApplyList: [newApply, ...this.data.myApplyList]
      });
      
      // 调用接口重新获取最新审批数据
      if (this.data.paserData.id) {
        this.getApproval(this.data.paserData.id);
      }
    })
    .catch(err => {
      console.log('申请提交失败:', err);
      wx.hideLoading();
      wx.showToast({
        title: '申请提交失败，请稍后再试',
        icon: 'none'
      });
    });
  },

  /**
   * 获取审批记录
   */
  getApproval(employeeId) {
    if (!employeeId) {
      console.log('缺少employeeId，无法查询审批记录');
      return;
    }
    
    http.get('/approval/getApproval', {
      employeeId: employeeId
    })
    .then(res => {
      console.log('审批记录查询成功:', res);
      
      // 假设接口返回格式：
      // {
      //   myApplyList: [...],
      //   pendingApprovalList: [...],
      //   approvedList: [...]
      // }
      
      // 确保数据存在并更新到页面
      this.setData({
        myApplyList: res.data.myApplyList || [],
        pendingApprovalList: res.data.pendingApprovalList || [],
        approvedList: res.data.approvedList || []
      });
    })
    .catch(err => {
      console.log('获取审批记录失败:', err);
      wx.showToast({
        title: '获取审批记录失败，请稍后再试',
        icon: 'none'
      });
    });
  }
});